Lock-Free ハッシュテーブル
#オセロAI など、ゲームAIでは #ハッシュテーブル に探索結果を保存して再利用するが、並列化する時にハッシュテーブルのロックが問題となる。 #データ構造
Robert Hyattらによる手法でLock-Freeな方法があったのでメモ
登録時
キーとなる局面に対してユニークな値key
登録するdata
について、ハッシュテーブルにはkey^dataとdataを保存する。
参照時
キーとハッシュ値を使ってテーブルを参照する
登録されている値について、key ^ data == dataが成立すれば正しく登録・参照できているということになる
オセロAIでの使い方
登録情報を使ってmaskを作る
mask = lower | (upper << 8) | (depth << 16) | (mpc_level << 24)など
key.player = player ^ mask
key.opponent = opponent ^ mask
これ、よく考えると、厳密には間違ったデータを保持してしまう可能性がある。やめたほうが良いかも。